/* Copyright (C) 2021 Rain */

/* This file is part of XNIX. */

/* 
  XNIX is free software: you can redistribute it and/or modify 
  it under the terms of the GNU General Public License as published by 
  the Free Software Foundation, either version 3 of the License, or 
  (at your option) and later version. 
*/

/*
  XNIX is distributed in the hope that it will be useful, 
  but WITHOUT ANY WARRANTY; without even the implied warranty of 
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 
  GNU General Public License for more details. 
*/

/*
  You should have received a copy of the GNU General Public License 
   along with XNIX. If not, see <https://www.gnu.org/licenses/>.  
*/




#include <kernel/init.h>
#include <kernel/errno.h>
#include <kernel/types.h>

#include <kernel/console.h>
#include <sys/syscall.h>


void *syscall_table[SYSCALL_NR] = {
	[0 ... SYSCALL_NR - 1] = no_syscall, 

#define mksyscall(fn, nr) [nr] = fn, 

	mksyscall(do_exit, 1)
	mksyscall(sys_print, 2)
};


int no_syscall(void) {
	printk(yellow, "no such system call. ");

	return -ENOSYS;
}

int sys_print(char *s) {
	printk(yellow, "sys_print: s = %q\n", s);

	if (!s) 
		return -EINVAL;

	print(yellow, s);

	return 0;
}
